/**
 * 
 */
package com.owen.he.jee.dao.impl;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import com.ibatis.common.util.PaginatedList;

/**
 * com.tiancom.pas.framework.ibatis <br>
 * 说明：ibaits DAO基类，用于基础数据的增、删、改、查操作<br>
 * <br>
 * 
 * @author: meteor 创建时间 2007-3-20 下午02:49:24
 */
public interface IBaseDAO {

	/**
	 * 插入对象
	 * 
	 * @param pojo
	 *            插入的对象（对应sqlMap中的parameterClass）
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 */
	public void insert(String sqlKey, Object pojo);

	/**
	 * 修改对象
	 * 
	 * @param key
	 *            要修改的对象（对应sqlMap中的parameterClass）
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return
	 */
	public int updateByPrimaryKey(String sqlKey, Object key);

	/**
	 * 根据主键查询对象
	 * 
	 * @param key
	 *            要修改的对象（对应sqlMap中的parameterClass）
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return
	 */
	public Object selectByPrimaryKey(String sqlKey, Object key);
	
	/**
	 * 根据主键查询对象
	 * 
	 * @param map
	 *            查询条件
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return
	 */
	public Object selectByPrimaryKey2(String sqlKey, Map map);

	/**
	 * 根据主键删除对象
	 * 
	 * @param key
	 *            要修改的对象（对应sqlMap中的parameterClass）
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return
	 */
	public int deleteByPrimaryKey(String sqlKey, Object key);
	
	/**
	 * 根据主键删除对象
	 * 
	 * @param map
	 *            删除条件
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return
	 */
	public int deleteByPrimaryKey2(String sqlKey, Map map);

	/**
	 * 根据条件查询对象集合
	 * 
	 * @param map
	 *            查询条件集合
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return 对象集合
	 */
	public List selectInfoByPara(String sqlKey, Map map);

	/**
	 * 根据条件取得分页数据
	 * 
	 * @param map
	 * @param sqlKey
	 * @param starRow
	 * @param pageSize
	 * @param id
	 * @return
	 */
	public List selectPageInfoByPara(String sqlKey, Map map, int starRow, int pageSize);

	public List selectPageInfoByParaForSp(String sqlKey, Map map, int starRow, int pageSize);

	/**
	 * 根据条件取得记录总条数
	 * 
	 * @param map
	 * @param sqlKey
	 * @return
	 */
	public Integer selectCountRows(String sqlKey, Map map);

	/**
	 * 根据页大小查询分页数据
	 * 
	 * @param map
	 * @param sqlKey
	 * @param pageSize
	 * @return
	 */
	public PaginatedList selectPage(String sqlKey, Map map, int pageSize);

	/**
	 * 根据参数查询对象列表(一个参数)
	 * 
	 * @param para
	 *            查询对象（对应sqlMap中的parameterClass）
	 * @param sqlKey
	 *            对应sqlMap中的的属性id
	 * @return
	 */
	public List selectListByPara(String sqlKey, Object para);

	/**
	 * 根据条件取得分页数据
	 * 
	 * @param map
	 * @param sqlKey
	 * @param starRow
	 * @param pageSize
	 * @param id
	 * @return
	 */
	public List selectPageInfoByParaNolazy(String sqlKey, Map map, int starRow, int pageSize);

	public String getDialect();

	public void reParseSqlMap(InputStream is);

	public void batchInsert(String sqlKey, List<Object> list);

	public void batchUpdate(String sqlKey, List<Object> list);

	public DataSource getSystemDataSource();

	public Map selectMapByPara(String sqlKey, Object para, String keyPro);

	public Map selectMapByPara(String sqlKey, Object para, String keyPro, String valueProp);
	
	public Object queryForObject(String sqlKey, Object para);
	
	public Object queryForObject(String sqlKey, Object para,String db);
}
